package com.hyperfix.washer.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hyperfix.common.exception.CustomException;
import com.hyperfix.models.common.R;
import com.hyperfix.models.washer.pojos.ParamConfig;
import com.hyperfix.models.washer.vos.ParamConfigVO;
import com.hyperfix.washer.common.ParamConfigRegistrar;
import com.hyperfix.washer.mapper.ParamConfigMapper;
import com.hyperfix.washer.service.ParamConfigService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author JiangChunYu
 * 2024/4/24
 */
@Service
public class ParamConfigServiceImpl extends ServiceImpl<ParamConfigMapper, ParamConfig> implements ParamConfigService {
    @Resource
    private ParamConfigMapper paramConfigMapper;
    @Resource
    private ParamConfigRegistrar paramConfigRegistrar;

    @Override
    public R<String> addOrUpdate(ParamConfigVO paramConfigVO) {
        // 查询报警参数配置是否存在
        ParamConfig paramConfig = paramConfigMapper.selectOne(paramConfigVO.getPipelineId(), paramConfigVO.getType());
        // 报警参数配置不存在 插入
        if (paramConfig == null) {
            paramConfig = new ParamConfig();
            BeanUtils.copyProperties(paramConfigVO, paramConfig);
            paramConfig.setUpdateTime(LocalDateTime.now());
            int insertRows = paramConfigMapper.insert(paramConfig);
            if (insertRows == 0) {
                throw new CustomException("报警参数配置添加失败");
            }
        } else {
            // 报警参数配置已存在 修改
            BeanUtils.copyProperties(paramConfigVO, paramConfig);
            int updateRows = paramConfigMapper.updateById(paramConfig);
            if (updateRows == 0) {
                throw new CustomException("报警参数配置修改失败");
            }
        }
        paramConfigRegistrar.modifyParamConfig(paramConfig);
        return R.success("报警参数配置修改成功");
    }

    @Override
    public R<List<ParamConfig>> getOnePipelineParamConfig(Integer pipelineId) {
        List<ParamConfig> paramConfigs = paramConfigMapper.selectList(
                new LambdaQueryWrapper<ParamConfig>().eq(ParamConfig::getPipelineId, pipelineId)
        );
        return R.success(paramConfigs);
    }
}
